//
// Camera.hpp for  in ~/Dropbox/Projets/raytracer-2016/Includes/Cameras/
//
// Made by Jonathan
// Login   <ledey_l@epitech.net>
//
// Started on  Sun Sep 22 17:26:04 2013 Jonathan
// Last update Thu Sep 26 00:18:12 2013 Jonathan
//

#ifndef			CAMERA_HPP_
# define		CAMERA_HPP_

# include		"Maths/Point.hpp"
# include		"Maths/Vector.hpp"

namespace		Cameras
{
  class			Camera
  {
  private:

  protected:
    Maths::Point	mEye;
    Maths::Point	mLookAt;
    long double		mRollAngle;
    Maths::Vector	mUp;
    Maths::Vector	mU;
    Maths::Vector	mV;
    Maths::Vector	mW;
    long double		mExposureTime;

  public:
    Camera(void);
    Camera(Camera const &rOther);
    Camera		&operator=(Camera const &rOther);
    virtual ~Camera(void);

    virtual Camera	*Clone(void) const = 0;
    virtual void	RenderScene(void) = 0;
    void		SetEye(Maths::Point const &rEye);
    void		SetEye(long double rX, long double rY, long double rZ);
    void		SetLookAt(Maths::Point const &rLookAt);
    void		SetLookAt(long double rX, long double rY, long double rZ);
    void		SetUpVector(Maths::Vector const &rVector);
    void		SetUpVector(long double rX, long double rY, long double rZ);
    void		SetRoll(long double rRollAngle);
    void		SetExposureTime(long double rExposureTime);
    void		ComputeUVW(void);
  };
};

#endif			/* CAMERA_HPP_ */
